package com.itany.corejava.code15_stream;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;

/**
 * @author MissChen
 * @date 2024年03月25日 16:53
 */
public class Test02_中间操作 {
    private static List<Integer> list= Arrays.asList(1,2,3,4,5,6,7,8,88,1,2,7);
    public static void main(String[] args) {
        // filterTest();
        // distinctTest();
        // limitTest();
        // skipTest();
        // findPageData(2,3);
        // mapTest();
        // sortedTest();
        sortedComparatorTest();
    }
    public static void filterTest(){

        //筛选过滤操作
        // list.stream().filter(new Predicate<Integer>() {
        //     @Override
        //     public boolean test(Integer integer) {
        //         return integer%2==0;
        //     }
        // }).forEach(new Consumer<Integer>() {
        //     @Override
        //     public void accept(Integer integer) {
        //         System.out.println(integer);
        //     }
        // });

        list.stream().filter(integer -> integer%2==0).forEach(System.out::println);
    }
    public static void distinctTest(){
        list.stream().distinct().forEach(System.out::println);
    }
    public static void limitTest(){
        //获取前5个元素
        list.stream().limit(5).forEach(System.out::println);
    }

    public static void skipTest(){
        //获取跳过前5个元素
        // list.stream().skip(5).forEach(System.out::println);
        //跳过的数量超出元素的数量，则显示未空流
        list.stream().skip(25).forEach(System.out::println);
    }

    /**
     * 模拟分页
     * @param pageNo 页码  2
     * @param pageSize 一页显示多少条数据 3
     */
    public static void findPageData(Integer pageNo,Integer pageSize){
        list.stream()
                .skip((pageNo-1)*pageSize)
                .limit(pageSize)
                .forEach(System.out::println);
    }

    public static void mapTest(){
        //对流中的每一个元素做二次处理
        list.stream()
                .map(i->i*2)
                .forEach(System.out::println);
    }

    public static void sortedTest(){
        //如果是数值，按照升序
        list.stream()
                .sorted()
                .forEach(System.out::println);
        //如果是字符串，按照字典顺序
        List<String> names=Arrays.asList("jack","alice","tom","lili","admin");
        names.stream()
                .sorted()
                .forEach(System.out::println);
    }

    public static void sortedComparatorTest(){
        list.stream()
                .sorted((o1,o2)->o2-o1)
                .forEach(System.out::println);

        List<String> names=Arrays.asList("jackqqqq","alice","tommmmd","liliaaaa","admin");
        names.stream()
                .sorted((o1,o2)->o2.length()-o1.length())
                .forEach(System.out::println);
    }

}
